package service.imol;

import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import pojo.Student;
import service.IStudentService;
import util.DateUtil;
import util.IoUtil;
import util.StaticUtil;

public class StudentSreviceimpl implements IStudentService
{
	/*建立一个Map容器
	 * 可以快速的通过学号 找到学生
	 * */
	private Map<Integer,Student> studentMap = new HashMap<Integer, Student>();
	public StudentSreviceimpl()
	{
		this.readFileStudent();
	}
	/*调用文件路径*/
	IoUtil ioUtil = new IoUtil();
	/*建立统一文件路径*/
	private String path ="Luck Draw\\docs\\student.txt";
	/*添加一条信息*/
	public int insertOneStudent(Student student)
	{
		/*设置学号*/
		student.setId(StaticUtil.putl());
		/*学号当成键上的值
		 * 键不能重复
		 * */
		studentMap.put(student.getId(), student);
		return student.getId();
	}
	/*查询所有用户*/
	public void selectStudent()
	{
		System.out.println("=本班级的成员="+this.studentMap.size());
		Set<Integer> keySet = this.studentMap.keySet();
		System.out.println("学号\t姓名\t年龄\t性别\t语文成绩\t数学成绩\t英语成绩\t总分\t平均分\t创建时间\t更新时间");
		for (Iterator iterator = keySet.iterator(); iterator.hasNext();)
		{
			Integer key = (Integer) iterator.next();
			/*通过键取值*/
			Student student = this.studentMap.get(key);
			System.out.println(student.getId()+"\t"+student.getName()+"\t"+student.getAge()+"\t"+student.isSex()+"\t"+student.getChinese()
			+"\t"+student.getMath()+"\t"+student.getEnglish()+"\t"+student.getTotalSocre()+"\t"+student.getAvgSocre()+
			"\t"+student.getCreateTime().toLocaleString()+"\t"+student.getUpdateTime().toLocaleString());
		}
	}
	/*存储学生的入学信息*/
	public void saveFileStudent()
	{
		/*获取文件的路径*/
		File targetFile = new File(path);
//		StringBuffer sb = new StringBuffer();
//		Set<Entry<Integer,Student>> entrySet = this.studentMap.entrySet();
//		for (Iterator<Entry<Integer,Student>> iterator = entrySet.iterator(); iterator.hasNext();)
//		{
//			Entry<Integer, Student> entry = (Entry<Integer, Student>) iterator.next();
//			int key = entry.getKey();
//			Student student = entry.getValue();
//			sb.append(student.listStr()+"\r\n");
//		}
//		System.out.println("=打印学生的信息="+sb.toString());
//		this.ioUtil.writeFile(targetFile, sb.toString());
		this.ioUtil.writeObjectFile(targetFile, this.studentMap);
		System.out.println("=保存已完成=");
	}
	/*读取文件的信息*/
	public void readFileStudent()
	{
		/*获取文件的路径*/
		File targetFile = new File(path);
//		/*开始读取文件的内容  加载封装好的工具类*/
//		DateUtil dateUtil = new DateUtil();
//		/*存储文件中的学生直到最后一个*/
//		Student lastStudent = null;
//		List<String> fileList = this.ioUtil.readFile(targetFile);
//		/*要将文件中的内容进行拆分 赋值到容器中去*/
//		for (Iterator<String> iterator = fileList.iterator(); iterator.hasNext();)
//		{
//			String st =iterator.next();
//			/*按照填写的制表符\t进行字符串拆分
//			 * 要对字符串进行拆分那么泛型必须是字符串*/
//			String [] line =st.split("\t");
//			/*将字符串变成学生对象*/
//			Student sd =new Student();
//			sd.setId(Integer.valueOf(line[0]));
//			sd.setName(line[1]);
//			sd.setAge(Integer.valueOf(line[2]));
//			if("男".equalsIgnoreCase(line[3]))
//			{
//				sd.setSex(true);
//			}else
//			{
//				sd.setSex(false);
//			}
//			sd.setChinese(Double.valueOf(line[4]));
//			sd.setMath(Double.valueOf(line[5]));
//			sd.setEnglish(Double.valueOf(line[6]));
//			/*将字符串 转换成Date*/
//			sd.setCreateTime(dateUtil.StringDate(line[9]));
//			sd.setUpdateTime(dateUtil.StringDate(line[10]));
//			/*将学生放到容器中*/
//			this.studentMap.put(sd.getId(), sd);
//			lastStudent = sd;
//		}
		/*把Map偏转成object*/
		Object obj = this.ioUtil.readObjectFile(targetFile);
		if(obj !=null)
		{
			this.studentMap =(Map<Integer,Student>) obj;
		}
		Student lastStudent = null ;
		for (Iterator<Integer> ite = this.studentMap.keySet().iterator(); ite.hasNext();)
		{
			Integer key = (Integer) ite.next();
			
			lastStudent = this.studentMap.get(key);
		}
		/*存储到最后一个学生*/
		if(lastStudent !=null)
		{
			/*将最后一个学生的学号上报*/
			StaticUtil.setCount(lastStudent.getId());
		}
	}
	/*查询一个学生*/
	public Student SelectOneStudent(int id)
	{
		/*根据id查询一个学生*/
		Student sd = this.studentMap.get(id);
		if(sd != null)
		{
			System.out.println(sd.listStr());
		}else
		{
			System.out.println("=确认后在重新出入=");
		}
		return sd;
	}
	/*更新一个学生*/
	public int updateOneStudent(Student student)
	{
		/*通过id 直接跟新*/
		this.studentMap.put(student.getId(), student);
		
		return student.getId();
	}
	/*删除一个学生*/
	public void deleteOneStudent(int id)
	{
		this.studentMap.remove(id);
	}
}
